// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Cloud User Accounts API Version beta
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://cloud.google.com/compute/docs/access/user-accounts/api/latest/'>Cloud User Accounts API</a>
 *      <tr><th>API Version<td>beta
 *      <tr><th>API Rev<td>20160316 (440)
 *      <tr><th>API Docs
 *          <td><a href='https://cloud.google.com/compute/docs/access/user-accounts/api/latest/'>
 *              https://cloud.google.com/compute/docs/access/user-accounts/api/latest/</a>
 *      <tr><th>Discovery Name<td>clouduseraccounts
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Cloud User Accounts API can be found at
 * <a href='https://cloud.google.com/compute/docs/access/user-accounts/api/latest/'>https://cloud.google.com/compute/docs/access/user-accounts/api/latest/</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.CloudUserAccounts.beta
{
    /// <summary>The CloudUserAccounts Service.</summary>
    public class CloudUserAccountsService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "beta";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public CloudUserAccountsService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public CloudUserAccountsService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            globalAccountsOperations = new GlobalAccountsOperationsResource(this);
            groups = new GroupsResource(this);
            linux = new LinuxResource(this);
            users = new UsersResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "clouduseraccounts"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://www.googleapis.com/clouduseraccounts/beta/projects/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return "clouduseraccounts/beta/projects/"; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Cloud User Accounts API.</summary>
        public class Scope
        {
            /// <summary>View and manage your data across Google Cloud Platform services</summary>
            public static string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";

            /// <summary>View your data across Google Cloud Platform services</summary>
            public static string CloudPlatformReadOnly = "https://www.googleapis.com/auth/cloud-platform.read-only";

            /// <summary>Manage your Google Cloud User Accounts</summary>
            public static string CloudUseraccounts = "https://www.googleapis.com/auth/cloud.useraccounts";

            /// <summary>View your Google Cloud User Accounts</summary>
            public static string CloudUseraccountsReadonly = "https://www.googleapis.com/auth/cloud.useraccounts.readonly";

        }



        private readonly GlobalAccountsOperationsResource globalAccountsOperations;

        /// <summary>Gets the GlobalAccountsOperations resource.</summary>
        public virtual GlobalAccountsOperationsResource GlobalAccountsOperations
        {
            get { return globalAccountsOperations; }
        }

        private readonly GroupsResource groups;

        /// <summary>Gets the Groups resource.</summary>
        public virtual GroupsResource Groups
        {
            get { return groups; }
        }

        private readonly LinuxResource linux;

        /// <summary>Gets the Linux resource.</summary>
        public virtual LinuxResource Linux
        {
            get { return linux; }
        }

        private readonly UsersResource users;

        /// <summary>Gets the Users resource.</summary>
        public virtual UsersResource Users
        {
            get { return users; }
        }
    }

    ///<summary>A base abstract class for CloudUserAccounts requests.</summary>
    public abstract class CloudUserAccountsBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new CloudUserAccountsBaseServiceRequest instance.</summary>
        protected CloudUserAccountsBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>Data format for the response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for the response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
        }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>IP address of the site where the request originates. Use this if you want to enforce per-user
        /// limits.</summary>
        [Google.Apis.Util.RequestParameterAttribute("userIp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UserIp { get; set; }

        /// <summary>Initializes CloudUserAccounts parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "userIp", new Google.Apis.Discovery.Parameter
                {
                    Name = "userIp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "globalAccountsOperations" collection of methods.</summary>
    public class GlobalAccountsOperationsResource
    {
        private const string Resource = "globalAccountsOperations";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public GlobalAccountsOperationsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Deletes the specified operation resource.</summary>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="operation">Name of the Operations
        /// resource to delete.</param>
        public virtual DeleteRequest Delete(string project, string operation)
        {
            return new DeleteRequest(service, project, operation);
        }

        /// <summary>Deletes the specified operation resource.</summary>
        public class DeleteRequest : CloudUserAccountsBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string project, string operation)
                : base(service)
            {
                Project = project;
                Operation = operation;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the Operations resource to delete.</summary>
            [Google.Apis.Util.RequestParameterAttribute("operation", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Operation { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/operations/{operation}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "operation", new Google.Apis.Discovery.Parameter
                    {
                        Name = "operation",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Retrieves the specified operation resource.</summary>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="operation">Name of the Operations
        /// resource to return.</param>
        public virtual GetRequest Get(string project, string operation)
        {
            return new GetRequest(service, project, operation);
        }

        /// <summary>Retrieves the specified operation resource.</summary>
        public class GetRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.Operation>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project, string operation)
                : base(service)
            {
                Project = project;
                Operation = operation;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the Operations resource to return.</summary>
            [Google.Apis.Util.RequestParameterAttribute("operation", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Operation { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/operations/{operation}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "operation", new Google.Apis.Discovery.Parameter
                    {
                        Name = "operation",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
            }

        }

        /// <summary>Retrieves the list of operation resources contained within the specified project.</summary>
        /// <param name="project">Project ID for this request.</param>
        public virtual ListRequest List(string project)
        {
            return new ListRequest(service, project);
        }

        /// <summary>Retrieves the list of operation resources contained within the specified project.</summary>
        public class ListRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.OperationList>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project)
                : base(service)
            {
                Project = project;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Sets a filter expression for filtering listed resources, in the form filter={expression}. Your
            /// {expression} must be in the format: field_name comparison_string literal_string.
            ///
            /// The field_name is the name of the field you want to compare. Only atomic field types are supported
            /// (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The
            /// literal_string is the string value to filter to. The literal value must be valid for the type of field
            /// you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a
            /// regular expression using RE2 syntax. The literal value must match the entire field.
            ///
            /// For example, to filter for instances that do not have a name of example-instance, you would use
            /// filter=name ne example-instance.
            ///
            /// Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested
            /// fields. For example, you could filter on instances that have set the scheduling.automaticRestart field
            /// to true. In particular, use filtering on nested fields to take advantage of instance labels to organize
            /// and filter results based on label values.
            ///
            /// The Beta API also supports filtering on multiple expressions by providing each separate expression
            /// within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple
            /// expressions are treated as AND expressions, meaning that resources must match all expressions to pass
            /// the filters.</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }

            /// <summary>The maximum number of results per page that should be returned. If the number of available
            /// results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the
            /// next page of results in subsequent list requests.</summary>
            /// [default: 500]
            /// [minimum: 0]
            /// [maximum: 500]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Sorts list results by a certain order. By default, results are returned in alphanumerical order
            /// based on the resource name.
            ///
            /// You can also sort results in descending order based on the creation timestamp using
            /// orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse
            /// chronological order (newest result first). Use this to sort resources like operations so that the newest
            /// operation is returned first.
            ///
            /// Currently, only sorting by name or creationTimestamp desc is supported.</summary>
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string OrderBy { get; set; }

            /// <summary>Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list
            /// request to get the next page of results.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/operations"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "500",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "groups" collection of methods.</summary>
    public class GroupsResource
    {
        private const string Resource = "groups";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public GroupsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Adds users to the specified group.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="groupName">Name of the group for
        /// this request.</param>
        public virtual AddMemberRequest AddMember(Google.Apis.CloudUserAccounts.beta.Data.GroupsAddMemberRequest body, string project, string groupName)
        {
            return new AddMemberRequest(service, body, project, groupName);
        }

        /// <summary>Adds users to the specified group.</summary>
        public class AddMemberRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.Operation>
        {
            /// <summary>Constructs a new AddMember request.</summary>
            public AddMemberRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudUserAccounts.beta.Data.GroupsAddMemberRequest body, string project, string groupName)
                : base(service)
            {
                Project = project;
                GroupName = groupName;
                Body = body;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the group for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("groupName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string GroupName { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.CloudUserAccounts.beta.Data.GroupsAddMemberRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "addMember"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/groups/{groupName}/addMember"; }
            }

            /// <summary>Initializes AddMember parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "groupName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "groupName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z][-a-z0-9_]{0,31}",
                    });
            }

        }

        /// <summary>Deletes the specified Group resource.</summary>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="groupName">Name of the Group
        /// resource to delete.</param>
        public virtual DeleteRequest Delete(string project, string groupName)
        {
            return new DeleteRequest(service, project, groupName);
        }

        /// <summary>Deletes the specified Group resource.</summary>
        public class DeleteRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.Operation>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string project, string groupName)
                : base(service)
            {
                Project = project;
                GroupName = groupName;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the Group resource to delete.</summary>
            [Google.Apis.Util.RequestParameterAttribute("groupName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string GroupName { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/groups/{groupName}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "groupName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "groupName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z][-a-z0-9_]{0,31}",
                    });
            }

        }

        /// <summary>Returns the specified Group resource.</summary>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="groupName">Name of the Group
        /// resource to return.</param>
        public virtual GetRequest Get(string project, string groupName)
        {
            return new GetRequest(service, project, groupName);
        }

        /// <summary>Returns the specified Group resource.</summary>
        public class GetRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.Group>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project, string groupName)
                : base(service)
            {
                Project = project;
                GroupName = groupName;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the Group resource to return.</summary>
            [Google.Apis.Util.RequestParameterAttribute("groupName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string GroupName { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/groups/{groupName}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "groupName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "groupName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z][-a-z0-9_]{0,31}",
                    });
            }

        }

        /// <summary>Creates a Group resource in the specified project using the data included in the request.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">Project ID for this request.</param>
        public virtual InsertRequest Insert(Google.Apis.CloudUserAccounts.beta.Data.Group body, string project)
        {
            return new InsertRequest(service, body, project);
        }

        /// <summary>Creates a Group resource in the specified project using the data included in the request.</summary>
        public class InsertRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.Operation>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudUserAccounts.beta.Data.Group body, string project)
                : base(service)
            {
                Project = project;
                Body = body;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.CloudUserAccounts.beta.Data.Group Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/groups"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
            }

        }

        /// <summary>Retrieves the list of groups contained within the specified project.</summary>
        /// <param name="project">Project ID for this request.</param>
        public virtual ListRequest List(string project)
        {
            return new ListRequest(service, project);
        }

        /// <summary>Retrieves the list of groups contained within the specified project.</summary>
        public class ListRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.GroupList>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project)
                : base(service)
            {
                Project = project;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Sets a filter expression for filtering listed resources, in the form filter={expression}. Your
            /// {expression} must be in the format: field_name comparison_string literal_string.
            ///
            /// The field_name is the name of the field you want to compare. Only atomic field types are supported
            /// (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The
            /// literal_string is the string value to filter to. The literal value must be valid for the type of field
            /// you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a
            /// regular expression using RE2 syntax. The literal value must match the entire field.
            ///
            /// For example, to filter for instances that do not have a name of example-instance, you would use
            /// filter=name ne example-instance.
            ///
            /// Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested
            /// fields. For example, you could filter on instances that have set the scheduling.automaticRestart field
            /// to true. In particular, use filtering on nested fields to take advantage of instance labels to organize
            /// and filter results based on label values.
            ///
            /// The Beta API also supports filtering on multiple expressions by providing each separate expression
            /// within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple
            /// expressions are treated as AND expressions, meaning that resources must match all expressions to pass
            /// the filters.</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }

            /// <summary>The maximum number of results per page that should be returned. If the number of available
            /// results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the
            /// next page of results in subsequent list requests.</summary>
            /// [default: 500]
            /// [minimum: 0]
            /// [maximum: 500]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Sorts list results by a certain order. By default, results are returned in alphanumerical order
            /// based on the resource name.
            ///
            /// You can also sort results in descending order based on the creation timestamp using
            /// orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse
            /// chronological order (newest result first). Use this to sort resources like operations so that the newest
            /// operation is returned first.
            ///
            /// Currently, only sorting by name or creationTimestamp desc is supported.</summary>
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string OrderBy { get; set; }

            /// <summary>Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list
            /// request to get the next page of results.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/groups"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "500",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Removes users from the specified group.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="groupName">Name of the group for
        /// this request.</param>
        public virtual RemoveMemberRequest RemoveMember(Google.Apis.CloudUserAccounts.beta.Data.GroupsRemoveMemberRequest body, string project, string groupName)
        {
            return new RemoveMemberRequest(service, body, project, groupName);
        }

        /// <summary>Removes users from the specified group.</summary>
        public class RemoveMemberRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.Operation>
        {
            /// <summary>Constructs a new RemoveMember request.</summary>
            public RemoveMemberRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudUserAccounts.beta.Data.GroupsRemoveMemberRequest body, string project, string groupName)
                : base(service)
            {
                Project = project;
                GroupName = groupName;
                Body = body;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the group for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("groupName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string GroupName { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.CloudUserAccounts.beta.Data.GroupsRemoveMemberRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "removeMember"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/groups/{groupName}/removeMember"; }
            }

            /// <summary>Initializes RemoveMember parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "groupName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "groupName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z][-a-z0-9_]{0,31}",
                    });
            }

        }
    }

    /// <summary>The "linux" collection of methods.</summary>
    public class LinuxResource
    {
        private const string Resource = "linux";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public LinuxResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Returns a list of authorized public keys for a specific user account.</summary>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="zone">Name of the zone for this
        /// request.</param>
        /// <param name="user">The user account for which you want to get a list of authorized public
        /// keys.</param>
        /// <param name="instance">The fully-qualified URL of the virtual machine requesting the
        /// view.</param>
        public virtual GetAuthorizedKeysViewRequest GetAuthorizedKeysView(string project, string zone, string user, string instance)
        {
            return new GetAuthorizedKeysViewRequest(service, project, zone, user, instance);
        }

        /// <summary>Returns a list of authorized public keys for a specific user account.</summary>
        public class GetAuthorizedKeysViewRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.LinuxGetAuthorizedKeysViewResponse>
        {
            /// <summary>Constructs a new GetAuthorizedKeysView request.</summary>
            public GetAuthorizedKeysViewRequest(Google.Apis.Services.IClientService service, string project, string zone, string user, string instance)
                : base(service)
            {
                Project = project;
                Zone = zone;
                User = user;
                Instance = instance;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the zone for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>The user account for which you want to get a list of authorized public keys.</summary>
            [Google.Apis.Util.RequestParameterAttribute("user", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string User { get; private set; }

            /// <summary>The fully-qualified URL of the virtual machine requesting the view.</summary>
            [Google.Apis.Util.RequestParameterAttribute("instance", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Instance { get; private set; }

            /// <summary>Whether the view was requested as part of a user-initiated login.</summary>
            [Google.Apis.Util.RequestParameterAttribute("login", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Login { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getAuthorizedKeysView"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/authorizedKeysView/{user}"; }
            }

            /// <summary>Initializes GetAuthorizedKeysView parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "user", new Google.Apis.Discovery.Parameter
                    {
                        Name = "user",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z][-a-z0-9_]{0,31}",
                    });
                RequestParameters.Add(
                    "instance", new Google.Apis.Discovery.Parameter
                    {
                        Name = "instance",
                        IsRequired = true,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "login", new Google.Apis.Discovery.Parameter
                    {
                        Name = "login",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Retrieves a list of user accounts for an instance within a specific project.</summary>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="zone">Name of the zone for this
        /// request.</param>
        /// <param name="instance">The fully-qualified URL of the virtual machine requesting the
        /// views.</param>
        public virtual GetLinuxAccountViewsRequest GetLinuxAccountViews(string project, string zone, string instance)
        {
            return new GetLinuxAccountViewsRequest(service, project, zone, instance);
        }

        /// <summary>Retrieves a list of user accounts for an instance within a specific project.</summary>
        public class GetLinuxAccountViewsRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.LinuxGetLinuxAccountViewsResponse>
        {
            /// <summary>Constructs a new GetLinuxAccountViews request.</summary>
            public GetLinuxAccountViewsRequest(Google.Apis.Services.IClientService service, string project, string zone, string instance)
                : base(service)
            {
                Project = project;
                Zone = zone;
                Instance = instance;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the zone for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Zone { get; private set; }

            /// <summary>The fully-qualified URL of the virtual machine requesting the views.</summary>
            [Google.Apis.Util.RequestParameterAttribute("instance", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Instance { get; private set; }

            /// <summary>Sets a filter expression for filtering listed resources, in the form filter={expression}. Your
            /// {expression} must be in the format: field_name comparison_string literal_string.
            ///
            /// The field_name is the name of the field you want to compare. Only atomic field types are supported
            /// (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The
            /// literal_string is the string value to filter to. The literal value must be valid for the type of field
            /// you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a
            /// regular expression using RE2 syntax. The literal value must match the entire field.
            ///
            /// For example, to filter for instances that do not have a name of example-instance, you would use
            /// filter=name ne example-instance.
            ///
            /// Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested
            /// fields. For example, you could filter on instances that have set the scheduling.automaticRestart field
            /// to true. In particular, use filtering on nested fields to take advantage of instance labels to organize
            /// and filter results based on label values.
            ///
            /// The Beta API also supports filtering on multiple expressions by providing each separate expression
            /// within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple
            /// expressions are treated as AND expressions, meaning that resources must match all expressions to pass
            /// the filters.</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }

            /// <summary>The maximum number of results per page that should be returned. If the number of available
            /// results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the
            /// next page of results in subsequent list requests.</summary>
            /// [default: 500]
            /// [minimum: 0]
            /// [maximum: 500]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Sorts list results by a certain order. By default, results are returned in alphanumerical order
            /// based on the resource name.
            ///
            /// You can also sort results in descending order based on the creation timestamp using
            /// orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse
            /// chronological order (newest result first). Use this to sort resources like operations so that the newest
            /// operation is returned first.
            ///
            /// Currently, only sorting by name or creationTimestamp desc is supported.</summary>
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string OrderBy { get; set; }

            /// <summary>Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list
            /// request to get the next page of results.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getLinuxAccountViews"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/zones/{zone}/linuxAccountViews"; }
            }

            /// <summary>Initializes GetLinuxAccountViews parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "zone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "zone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
                    });
                RequestParameters.Add(
                    "instance", new Google.Apis.Discovery.Parameter
                    {
                        Name = "instance",
                        IsRequired = true,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "500",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "users" collection of methods.</summary>
    public class UsersResource
    {
        private const string Resource = "users";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public UsersResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Adds a public key to the specified User resource with the data included in the request.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="user">Name of the user for this
        /// request.</param>
        public virtual AddPublicKeyRequest AddPublicKey(Google.Apis.CloudUserAccounts.beta.Data.PublicKey body, string project, string user)
        {
            return new AddPublicKeyRequest(service, body, project, user);
        }

        /// <summary>Adds a public key to the specified User resource with the data included in the request.</summary>
        public class AddPublicKeyRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.Operation>
        {
            /// <summary>Constructs a new AddPublicKey request.</summary>
            public AddPublicKeyRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudUserAccounts.beta.Data.PublicKey body, string project, string user)
                : base(service)
            {
                Project = project;
                User = user;
                Body = body;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the user for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("user", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string User { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.CloudUserAccounts.beta.Data.PublicKey Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "addPublicKey"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/users/{user}/addPublicKey"; }
            }

            /// <summary>Initializes AddPublicKey parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "user", new Google.Apis.Discovery.Parameter
                    {
                        Name = "user",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z][-a-z0-9_]{0,31}",
                    });
            }

        }

        /// <summary>Deletes the specified User resource.</summary>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="user">Name of the user resource to
        /// delete.</param>
        public virtual DeleteRequest Delete(string project, string user)
        {
            return new DeleteRequest(service, project, user);
        }

        /// <summary>Deletes the specified User resource.</summary>
        public class DeleteRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.Operation>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string project, string user)
                : base(service)
            {
                Project = project;
                User = user;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the user resource to delete.</summary>
            [Google.Apis.Util.RequestParameterAttribute("user", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string User { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/users/{user}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "user", new Google.Apis.Discovery.Parameter
                    {
                        Name = "user",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z][-a-z0-9_]{0,31}",
                    });
            }

        }

        /// <summary>Returns the specified User resource.</summary>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="user">Name of the user resource to
        /// return.</param>
        public virtual GetRequest Get(string project, string user)
        {
            return new GetRequest(service, project, user);
        }

        /// <summary>Returns the specified User resource.</summary>
        public class GetRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.User>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project, string user)
                : base(service)
            {
                Project = project;
                User = user;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the user resource to return.</summary>
            [Google.Apis.Util.RequestParameterAttribute("user", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string User { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/users/{user}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "user", new Google.Apis.Discovery.Parameter
                    {
                        Name = "user",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z][-a-z0-9_]{0,31}",
                    });
            }

        }

        /// <summary>Creates a User resource in the specified project using the data included in the request.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">Project ID for this request.</param>
        public virtual InsertRequest Insert(Google.Apis.CloudUserAccounts.beta.Data.User body, string project)
        {
            return new InsertRequest(service, body, project);
        }

        /// <summary>Creates a User resource in the specified project using the data included in the request.</summary>
        public class InsertRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.Operation>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudUserAccounts.beta.Data.User body, string project)
                : base(service)
            {
                Project = project;
                Body = body;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.CloudUserAccounts.beta.Data.User Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/users"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
            }

        }

        /// <summary>Retrieves a list of users contained within the specified project.</summary>
        /// <param name="project">Project ID for this request.</param>
        public virtual ListRequest List(string project)
        {
            return new ListRequest(service, project);
        }

        /// <summary>Retrieves a list of users contained within the specified project.</summary>
        public class ListRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.UserList>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project)
                : base(service)
            {
                Project = project;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Sets a filter expression for filtering listed resources, in the form filter={expression}. Your
            /// {expression} must be in the format: field_name comparison_string literal_string.
            ///
            /// The field_name is the name of the field you want to compare. Only atomic field types are supported
            /// (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The
            /// literal_string is the string value to filter to. The literal value must be valid for the type of field
            /// you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a
            /// regular expression using RE2 syntax. The literal value must match the entire field.
            ///
            /// For example, to filter for instances that do not have a name of example-instance, you would use
            /// filter=name ne example-instance.
            ///
            /// Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested
            /// fields. For example, you could filter on instances that have set the scheduling.automaticRestart field
            /// to true. In particular, use filtering on nested fields to take advantage of instance labels to organize
            /// and filter results based on label values.
            ///
            /// The Beta API also supports filtering on multiple expressions by providing each separate expression
            /// within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple
            /// expressions are treated as AND expressions, meaning that resources must match all expressions to pass
            /// the filters.</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }

            /// <summary>The maximum number of results per page that should be returned. If the number of available
            /// results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the
            /// next page of results in subsequent list requests.</summary>
            /// [default: 500]
            /// [minimum: 0]
            /// [maximum: 500]
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Sorts list results by a certain order. By default, results are returned in alphanumerical order
            /// based on the resource name.
            ///
            /// You can also sort results in descending order based on the creation timestamp using
            /// orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse
            /// chronological order (newest result first). Use this to sort resources like operations so that the newest
            /// operation is returned first.
            ///
            /// Currently, only sorting by name or creationTimestamp desc is supported.</summary>
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string OrderBy { get; set; }

            /// <summary>Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list
            /// request to get the next page of results.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/users"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "500",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Removes the specified public key from the user.</summary>
        /// <param name="project">Project ID for this request.</param>
        /// <param name="user">Name of the user for this
        /// request.</param>
        /// <param name="fingerprint">The fingerprint of the public key to delete. Public keys are
        /// identified by their fingerprint, which is defined by RFC4716 to be the MD5 digest of the public key.</param>
        public virtual RemovePublicKeyRequest RemovePublicKey(string project, string user, string fingerprint)
        {
            return new RemovePublicKeyRequest(service, project, user, fingerprint);
        }

        /// <summary>Removes the specified public key from the user.</summary>
        public class RemovePublicKeyRequest : CloudUserAccountsBaseServiceRequest<Google.Apis.CloudUserAccounts.beta.Data.Operation>
        {
            /// <summary>Constructs a new RemovePublicKey request.</summary>
            public RemovePublicKeyRequest(Google.Apis.Services.IClientService service, string project, string user, string fingerprint)
                : base(service)
            {
                Project = project;
                User = user;
                Fingerprint = fingerprint;
                InitParameters();
            }


            /// <summary>Project ID for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Name of the user for this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("user", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string User { get; private set; }

            /// <summary>The fingerprint of the public key to delete. Public keys are identified by their fingerprint,
            /// which is defined by RFC4716 to be the MD5 digest of the public key.</summary>
            [Google.Apis.Util.RequestParameterAttribute("fingerprint", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Fingerprint { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "removePublicKey"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/global/users/{user}/removePublicKey"; }
            }

            /// <summary>Initializes RemovePublicKey parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
                    });
                RequestParameters.Add(
                    "user", new Google.Apis.Discovery.Parameter
                    {
                        Name = "user",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"[a-z][-a-z0-9_]{0,31}",
                    });
                RequestParameters.Add(
                    "fingerprint", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fingerprint",
                        IsRequired = true,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = @"[a-f0-9]{32}",
                    });
            }

        }
    }
}

namespace Google.Apis.CloudUserAccounts.beta.Data
{    

    /// <summary>A list of authorized public keys for a user account.</summary>
    public class AuthorizedKeysView : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] The list of authorized public keys in SSH format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("keys")]
        public virtual System.Collections.Generic.IList<string> Keys { get; set; } 

        /// <summary>[Output Only] Whether the user has the ability to elevate on the instance that requested the
        /// authorized keys.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sudoer")]
        public virtual System.Nullable<bool> Sudoer { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A Group resource.</summary>
    public class Group : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] Creation timestamp in RFC3339 text format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationTimestamp")]
        public virtual string CreationTimestamp { get; set; } 

        /// <summary>An optional textual description of the resource; provided by the client when the resource is
        /// created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>[Output Only] Unique identifier for the resource; defined by the server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<ulong> Id { get; set; } 

        /// <summary>[Output Only] Type of the resource. Always clouduseraccounts#group for groups.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>[Output Only] A list of URLs to User resources who belong to the group. Users may only be members
        /// of groups in the same project.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("members")]
        public virtual System.Collections.Generic.IList<string> Members { get; set; } 

        /// <summary>Name of the resource; provided by the client when the resource is created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>[Output Only] Server defined URL for the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class GroupList : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] Unique identifier for the resource; defined by the server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>[Output Only] A list of Group resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Group> Items { get; set; } 

        /// <summary>[Output Only] Type of resource. Always clouduseraccounts#groupList for lists of groups.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>[Output Only] A token used to continue a truncated list request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>[Output Only] Server defined URL for this resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class GroupsAddMemberRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Fully-qualified URLs of the User resources to add.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("users")]
        public virtual System.Collections.Generic.IList<string> Users { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class GroupsRemoveMemberRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Fully-qualified URLs of the User resources to remove.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("users")]
        public virtual System.Collections.Generic.IList<string> Users { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A list of all Linux accounts for this project. This API is only used by Compute Engine virtual machines
    /// to get information about user accounts for a project or instance. Linux resources are read-only views into users
    /// and groups managed by the Compute Engine Accounts API.</summary>
    public class LinuxAccountViews : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] A list of all groups within a project.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("groupViews")]
        public virtual System.Collections.Generic.IList<LinuxGroupView> GroupViews { get; set; } 

        /// <summary>[Output Only] Type of the resource. Always clouduseraccounts#linuxAccountViews for Linux
        /// resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>[Output Only] A list of all users within a project.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userViews")]
        public virtual System.Collections.Generic.IList<LinuxUserView> UserViews { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class LinuxGetAuthorizedKeysViewResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] A list of authorized public keys for a user.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resource")]
        public virtual AuthorizedKeysView Resource { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class LinuxGetLinuxAccountViewsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] A list of authorized user accounts and groups.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resource")]
        public virtual LinuxAccountViews Resource { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A detailed view of a Linux group.</summary>
    public class LinuxGroupView : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] The Group ID.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gid")]
        public virtual System.Nullable<long> Gid { get; set; } 

        /// <summary>[Output Only] Group name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("groupName")]
        public virtual string GroupName { get; set; } 

        /// <summary>[Output Only] List of user accounts that belong to the group.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("members")]
        public virtual System.Collections.Generic.IList<string> Members { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A detailed view of a Linux user account.</summary>
    public class LinuxUserView : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] The GECOS (user information) entry for this account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gecos")]
        public virtual string Gecos { get; set; } 

        /// <summary>[Output Only] User's default group ID.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gid")]
        public virtual System.Nullable<long> Gid { get; set; } 

        /// <summary>[Output Only] The path to the home directory for this account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("homeDirectory")]
        public virtual string HomeDirectory { get; set; } 

        /// <summary>[Output Only] The path to the login shell for this account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shell")]
        public virtual string Shell { get; set; } 

        /// <summary>[Output Only] User ID.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("uid")]
        public virtual System.Nullable<long> Uid { get; set; } 

        /// <summary>[Output Only] The username of the account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("username")]
        public virtual string Username { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An Operation resource, used to manage asynchronous API requests.</summary>
    public class Operation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] Reserved for future use.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clientOperationId")]
        public virtual string ClientOperationId { get; set; } 

        /// <summary>[Output Only] Creation timestamp in RFC3339 text format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationTimestamp")]
        public virtual string CreationTimestamp { get; set; } 

        /// <summary>[Output Only] A textual description of the operation, which is set when the operation is
        /// created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>[Output Only] The time that this operation was completed. This value is in RFC3339 text
        /// format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endTime")]
        public virtual string EndTime { get; set; } 

        /// <summary>[Output Only] If errors are generated during processing of the operation, this field will be
        /// populated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("error")]
        public virtual Operation.ErrorData Error { get; set; } 

        /// <summary>[Output Only] If the operation fails, this field contains the HTTP error message that was returned,
        /// such as NOT FOUND.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("httpErrorMessage")]
        public virtual string HttpErrorMessage { get; set; } 

        /// <summary>[Output Only] If the operation fails, this field contains the HTTP error status code that was
        /// returned. For example, a 404 means the resource was not found.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("httpErrorStatusCode")]
        public virtual System.Nullable<int> HttpErrorStatusCode { get; set; } 

        /// <summary>[Output Only] The unique identifier for the resource. This identifier is defined by the
        /// server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<ulong> Id { get; set; } 

        /// <summary>[Output Only] The time that this operation was requested. This value is in RFC3339 text
        /// format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("insertTime")]
        public virtual string InsertTime { get; set; } 

        /// <summary>[Output Only] Type of the resource. Always compute#operation for Operation resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>[Output Only] Name of the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>[Output Only] The type of operation, such as insert, update, or delete, and so on.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operationType")]
        public virtual string OperationType { get; set; } 

        /// <summary>[Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement
        /// that this be linear or support any granularity of operations. This should not be used to guess when the
        /// operation will be complete. This number should monotonically increase as the operation progresses.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("progress")]
        public virtual System.Nullable<int> Progress { get; set; } 

        /// <summary>[Output Only] The URL of the region where the operation resides. Only available when performing
        /// regional operations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("region")]
        public virtual string Region { get; set; } 

        /// <summary>[Output Only] Server-defined URL for the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>[Output Only] The time that this operation was started by the server. This value is in RFC3339 text
        /// format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startTime")]
        public virtual string StartTime { get; set; } 

        /// <summary>[Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or
        /// DONE.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>[Output Only] An optional textual description of the current status of the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("statusMessage")]
        public virtual string StatusMessage { get; set; } 

        /// <summary>[Output Only] The unique target ID, which identifies a specific incarnation of the target
        /// resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetId")]
        public virtual System.Nullable<ulong> TargetId { get; set; } 

        /// <summary>[Output Only] The URL of the resource that the operation modifies.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetLink")]
        public virtual string TargetLink { get; set; } 

        /// <summary>[Output Only] User who requested the operation, for example: user@example.com.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("user")]
        public virtual string User { get; set; } 

        /// <summary>[Output Only] If warning messages are generated during processing of the operation, this field will
        /// be populated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("warnings")]
        public virtual System.Collections.Generic.IList<Operation.WarningsData> Warnings { get; set; } 

        /// <summary>[Output Only] The URL of the zone where the operation resides. Only available when performing per-
        /// zone operations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("zone")]
        public virtual string Zone { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
        

        /// <summary>[Output Only] If errors are generated during processing of the operation, this field will be
        /// populated.</summary>
        public class ErrorData
        {
            /// <summary>[Output Only] The array of errors encountered while processing this operation.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("errors")]
            public virtual System.Collections.Generic.IList<ErrorData.ErrorsData> Errors { get; set; } 

            

            public class ErrorsData
            {
                /// <summary>[Output Only] The error type identifier for this error.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("code")]
                public virtual string Code { get; set; } 

                /// <summary>[Output Only] Indicates the field in the request that caused the error. This property is
                /// optional.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("location")]
                public virtual string Location { get; set; } 

                /// <summary>[Output Only] An optional, human-readable error message.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("message")]
                public virtual string Message { get; set; } 

            }
        }    

        public class WarningsData
        {
            /// <summary>[Output Only] A warning code, if applicable. For example, Compute Engine returns
            /// NO_RESULTS_ON_PAGE if there are no results in the response.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("code")]
            public virtual string Code { get; set; } 

            /// <summary>[Output Only] Metadata about this warning in key: value format. For example: "data": [ { "key":
            /// "scope", "value": "zones/us-east1-d" }</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("data")]
            public virtual System.Collections.Generic.IList<WarningsData.DataData> Data { get; set; } 

            /// <summary>[Output Only] A human-readable description of the warning code.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("message")]
            public virtual string Message { get; set; } 

            

            public class DataData
            {
                /// <summary>[Output Only] A key that provides more detail on the warning being returned. For example,
                /// for warnings where there are no results in a list request for a particular zone, this key might be
                /// scope and the key value might be the zone name. Other examples might be a key indicating a
                /// deprecated resource and a suggested replacement, or a warning about invalid network settings (for
                /// example, if an instance attempts to perform IP forwarding but is not enabled for IP
                /// forwarding).</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("key")]
                public virtual string Key { get; set; } 

                /// <summary>[Output Only] A warning data value corresponding to the key.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("value")]
                public virtual string Value { get; set; } 

            }
        }
    }    

    /// <summary>Contains a list of Operation resources.</summary>
    public class OperationList : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] The unique identifier for the resource. This identifier is defined by the
        /// server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>[Output Only] A list of Operation resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Operation> Items { get; set; } 

        /// <summary>[Output Only] Type of resource. Always compute#operations for Operations resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>[Output Only] This token allows you to get the next page of results for list requests. If the
        /// number of results is larger than maxResults, use the nextPageToken as a value for the query parameter
        /// pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue
        /// paging through the results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>[Output Only] Server-defined URL for this resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A public key for authenticating to guests.</summary>
    public class PublicKey : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] Creation timestamp in RFC3339 text format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationTimestamp")]
        public virtual string CreationTimestamp { get; set; } 

        /// <summary>An optional textual description of the resource; provided by the client when the resource is
        /// created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>Optional expiration timestamp. If provided, the timestamp must be in RFC3339 text format. If not
        /// provided, the public key never expires.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("expirationTimestamp")]
        public virtual string ExpirationTimestamp { get; set; } 

        /// <summary>[Output Only] The fingerprint of the key is defined by RFC4716 to be the MD5 digest of the public
        /// key.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fingerprint")]
        public virtual string Fingerprint { get; set; } 

        /// <summary>Public key text in SSH format, defined by RFC4253 section 6.6.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("key")]
        public virtual string Key { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A User resource.</summary>
    public class User : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] Creation timestamp in RFC3339 text format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationTimestamp")]
        public virtual string CreationTimestamp { get; set; } 

        /// <summary>An optional textual description of the resource; provided by the client when the resource is
        /// created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>[Output Only] A list of URLs to Group resources who contain the user. Users are only members of
        /// groups in the same project.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("groups")]
        public virtual System.Collections.Generic.IList<string> Groups { get; set; } 

        /// <summary>[Output Only] Unique identifier for the resource; defined by the server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<ulong> Id { get; set; } 

        /// <summary>[Output Only] Type of the resource. Always clouduseraccounts#user for users.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Name of the resource; provided by the client when the resource is created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Email address of account's owner. This account will be validated to make sure it exists. The email
        /// can belong to any domain, but it must be tied to a Google account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("owner")]
        public virtual string Owner { get; set; } 

        /// <summary>[Output Only] Public keys that this user may use to login.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("publicKeys")]
        public virtual System.Collections.Generic.IList<PublicKey> PublicKeys { get; set; } 

        /// <summary>[Output Only] Server defined URL for the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class UserList : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] Unique identifier for the resource; defined by the server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>[Output Only] A list of User resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<User> Items { get; set; } 

        /// <summary>[Output Only] Type of resource. Always clouduseraccounts#userList for lists of users.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>[Output Only] A token used to continue a truncated list request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>[Output Only] Server defined URL for this resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
